import pandas as pd
from alarms_server_tools import ZabbixAlarmClient
import pandas as pd
import os


# 假设data是一个新的数据列表，你想要将它追加到alarms.xlsx文件的某个工作表中
def save_to_excel(filename, sheet_name, data):
    # 重要的是写入函数对象的建立，即if else里的两种情况
    # 如果文件对象不存在，那么就使用默认的模式，即mode=‘w’，会创建一个新的文件
    if not os.path.exists(filename):
        writer = pd.ExcelWriter(filename, engine='openpyxl')
    else:  # 如果文件对象存在，那么就使用追加模式，设置if_sheet_exists='overlay'，此时需要设置mode=‘a’
        writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a', if_sheet_exists='overlay')
    # 后面是保存数据相关的代码了，
    pd_data = pd.DataFrame(data)  # 将变量转换成df格式
    pd_data.to_excel(writer, sheet_name=sheet_name, header=None, index=None)  # 不要索引、不要表头
    writer.save()
    writer.close()


class DataHandler(object):
    def __init__(self):
        self.raw_datas = []
        self.load_files()
        # self.query_url =  "http://127.0.0.1:18080/monitor/alarm_types/"

    def load_files(self):
        for file_name in ['alarms1.xlsx', 'alarms2.xlsx', 'alarms3.xlsx', 'alarms4.xlsx']:
            # 读取Excel文件
            df = pd.read_excel(file_name)
            """
            id                     1344191
            ip                10.20.130.33
            depart                    项目后台
            item      bond1 出向流量平均5分钟大于90%
            level                        2
            name                    zabbix
            """
            # 遍历每一行
            for index, row in df.iterrows():
                # 处理每一行的数据
                if row["ip"] == "*UNKNOWN*" or row["ip"] == "None":
                    pass
                else:
                    data = {
                        "source": row["name"],
                        "depart": row["depart"],
                        "ip": row["ip"],
                        "item": row["item"],
                        "alarm_level": row["level"],
                    }

                    self.raw_datas.append(data)

    def get_content_types(self):
        print("len(self.raw_datas)", len(self.raw_datas))
        page_size = 50
        max_page = len(self.raw_datas) // page_size + 1
        for i in range(0, max_page):
            s = ZabbixAlarmClient()
            res = s.post_alarm_types(self.raw_datas[i * page_size: (i + 1) * page_size])
            print("源信息", self.raw_datas[i * page_size: (i + 1) * page_size])
            # 将数据列表转换为DataFrame
            df = pd.DataFrame(res["result"])
            df.to_csv('alarms_result.csv', sep="\t", mode='a', index=False, encoding='utf-8-sig')


data_handler = DataHandler()
print(len(data_handler.raw_datas))
print(data_handler.get_content_types())
